import java.awt.*;
import java.awt.geom.*;
import java.awt.font.*;


/**
* Beispiel fuer die Verwendung von Text
*
* @author Frank Klawonn
* Letzte Aenderung 27.05.2005
*/


public class TextExample extends Frame
{
  /**
  * Konstruktor
  */
  TextExample()
  {
    //Ermoeglicht das Schliessen des Fensters
    addWindowListener(new MyFinishWindow());
  }


  public void paint(Graphics g)
  {
    Graphics2D g2d = (Graphics2D) g;

    //Darstellung eines Textes in einem ausgewaehltem Zeichensatz
    Font f1 = new Font("Lucida Bright",Font.BOLD,20);
    g2d.setFont(f1);
    g2d.drawString("Font Lucida Bright in Fettschrift",50,100);



    //Die Buchstaben des folgenden Strings sollen einzeln veraendert (gedreht)
    //werden.
    String s = "somersault";
    Font f2 = new Font("serif",Font.PLAIN,50);
    g2d.setFont(f2);
    FontRenderContext frc = g2d.getFontRenderContext();
    //Erzeugung des GlyphVector.
    GlyphVector gv = f2.createGlyphVector(frc, s);
    int lengthOfS = gv.getNumGlyphs();

    //Jeder Buchstabe wird ein bisschen mehr rotiert und nach rechts verschoben.
    AffineTransform at = new AffineTransform();
    AffineTransform shift = new AffineTransform();
    shift.setToTranslation(100,300);
    Point2D p;
    Shape glyph;
    double theta;
    g2d.setPaint(Color.red);
    for (int i=0; i<lengthOfS; i++)
    {
      //Position des Buchstaben
      p = gv.getGlyphPosition(i);
      //Berechnung des Drehwinkels
      theta = (2*Math.PI*i)/(lengthOfS-1);
      //Definition der Rotation
      at.setToRotation(theta,p.getX(),p.getY());
      //(akkumulierte) Verschiebung
      shift.translate(10,0);
      //akkumulierte Verschiebung + Rotation
      at.preConcatenate(shift);
      //Umwandlung des Glyphen in einen Shape
      glyph = gv.getGlyphOutline(i);
      //Transformation des Buchstaben (Shape)
      glyph = at.createTransformedShape(glyph);
      //Zeichnen des Buchstaben (transformierten Shape)
      g2d.fill(glyph);
    }
  }

  public static void main(String[] argv)
  {
    TextExample f = new TextExample();
    f.setTitle("Verwendung von Zeichensaetzen");
    f.setSize(600,600);
    f.setVisible(true);
  }

}

